﻿
$(document).ready(function () {

    $(".container").on("click", ".fecharMsg", function () {
        $("#alertaMsg").hide();
    });

    $(this).bind("ajaxStart", function() {
        $("#divLoading").fadeIn();
    });

    $(this).bind("ajaxComplete", function() {
        $("#divLoading").fadeOut();
    });

    //Muda a formatação da data, para que funcione no formato brasileiro
    $.validator.methods.date = function (value, element) {
        return this.optional(element) || Globalize.parseDate(value, "dd/MM/yyyy") !== null || Globalize.parseDate(value, "HH:mm") !== null || Globalize.parseDate(value, "yyyy") !== null;
    }

    ////Muda a formatação do número, para que funcione
    //$.validator.methods.number = function (value, element) {
    //    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)?(?:,\d+)?$/.test(value);
    //}

});


/**
 * Metodo que cria componente Datetimepicker.
 * @class datetimepicker
 */

function DatetimepickerFactory() {

    $(".dateTimePicker").datetimepicker({
        format: "DD/MM/YYYY",
        viewMode: "years",
        pickTime: false,
        locale: "pt-br",
        useCurrent: false
    });

    $(".timePicker").datetimepicker({
        pickDate: false,
        format: "HH:mm",
        useCurrent: false
    });

    $(".clearField, .clearFieldTable").on("click", function () {
        $(this).parent().find("input").data("DateTimePicker").setDate(null);
    });

    MouseChangePointer(".dateTimeGroup");

    $(".disabledDate").each(function () {

        if (IsNullOrUndefined($(this).val()))
        {
            $(this).data("DateTimePicker").disable();
        }

    });

}

function SimpleDatetimepickerFactory() {

    $(".dateTimePicker").datetimepicker({
        format: "DD/MM/YYYY",
        viewMode: "years",
        pickTime: false,
        locale: "pt-br",
        useCurrent: false
    });

    $(".timePicker").datetimepicker({
        pickDate: false,
        format: "HH:mm",
        useCurrent: false
    });

    $(".clearField").on("click", function () {
        $(this).parent().find("input").data("DateTimePicker").setDate(null);
    });

    MouseChangePointer(".dateTimeGroup");

}

/**
 * Metodo que cria a mascara no campo de telefone. Já adaptado ao novo padrão.
  * @class tel
 */

function TelefoneFactory() {

    $(".tel").focusout(function () {
        var element = $(this);
        element.unmask();
        var phone = element.val().replace(/\D/g, "");
        if (phone.length > 10) {
            element.mask("(00) 00000-0000");
        } else {
            element.mask("(00) 0000-00000");
        }
    }).trigger("focusout");

}

/**
 * Metodo que cria a mascara no campo de cpf.
  * @class cpf
 */

function CpfFactory() {
    $(".cpf").mask("000.000.000-00", { reverse: true });
}

/**
 * Metodo que cria a mascara no campo de cnpj.
  * @class cpf
 */

function CnpjFactory() {
    $(".cnpj").mask("00.000.000/0000-00", { reverse: true });
}

/**
 * Metodo que remove a mascara no campo de cpf e/ou cnpj.
  * @class cpf
 */

function RemoverMascaraCpfCnpj(cgcCpf) {
    return cgcCpf.replace(/\./g, "").replace("-", "").replace("/", "");
}


/**
 * Metodo que cria a mascara no campo de cep.
  * @class cep
 */

function CepFactory() {
    $(".cep").mask("00000-000");
}

/**
 * Metodo que cria habilita somente a inserção de números no campo.
  * @class apenasNumeros
 */

function ApenasNumeros() {

    $(".apenasNumeros").each(function () {
        var $this = $(this);
        if ($this.attr("class") !== "readOnly") {
            $this.bind("input propertychange", function () {
                return $(this).val($(this).val().replace(/[^0-9]+/gi, ""));
            });
        }
    });

};

function ApenasNumerosDecimal() {
    $(".apenasNumerosDecimal").each(function () {
        var $this = $(this);
        if ($this.attr("class") !== "readOnly") {
            $this.bind("input propertychange", function () {
                return $(this).val($(this).val().replace(/[^0-9,.]+/gi, ""));
            });
        }
    });
};

function MaskMoneyFactory() {
    $(".apenasNumerosDecimal").each(function () {

        var valorCorrente = $(this);

        valorCorrente.maskMoney({
            decimal: ",",
            thousands: "."
        });

        if (valorCorrente.val() === "0")
            valorCorrente.val("");

    });
}

/**
 * Metodo que muda o formato do cursor pra pointer 
 */

function MouseChangePointer(filter) {

    $(filter).each(function () {

        $(this).hover(function () {
            $(this).css("cursor", "pointer");
        }, function () {
            $(this).css("cursor", "auto");
        });

    });

}

/**
 * Metodo generico que adiciona mensagem de erro a um campo.
 * @param Evento { campo, mensagem }
 * @return Mensagem de validação abaixo do campo.
 */

function AddErro(field, msg) {

    var span = $(field).closest("div").find(".field-validation-valid");

    span.html(msg);

    span.removeClass("field-validation-valid").addClass("field-validation-error");

    $(field).on("keypress paste click", function () {
        var msgErro = $(this).closest("div").find(".field-validation-error");
        if (msgErro.length !== 0) {
            msgErro.removeClass("field-validation-error").addClass("field-validation-valid").html("");
        }
    });

}

/*Metódo genérico responsável por remover uma mensagem de erro no campo*/
/*Parametro(campo)*/
function RemoveMsgErro(field) {

    var spanField;

    if (field.hasOwnProperty("originalEvent")) {
        spanField = field.data.seletor.closest("div").find("span");
    } else {
        spanField = field.closest("div").find("span");
    }

    if (spanField.hasClass("field-validation-error")) {
        spanField.removeClass("field-validation-error");
        spanField.addClass("field-validation-valid");
        spanField.html("");
        if (field.hasClass("input-validation-error")) {
             field.removeClass("input-validation-error");
        }
    }

}


/**
 * Metodo de exibição de modal informando erros.
 * @param Evento { mensagem, tipo}
 * @return Mensagem de validação abaixo do campo.
 */
function ExibeMensagem(mensagem, tipo) {
    $("#textoMsg").html(mensagem);

    $(".formataMsg").removeClass("sucessoMsg").removeClass("erroMsg");

    switch (tipo) {
        case "sucesso":
            $(".formataMsg").addClass("sucessoMsg");
            break;
        case "info":
            break;
        case "erro":
            $(".formataMsg").addClass("erroMsg");
            break;
        default:
    }

    $("#alertaMsg").show();
}

function ValidarRangeValor(minElement, maxElement, element, msgErro) {

    var minimo = parseFloat(minElement);
    var maximo = parseFloat(maxElement);
    var valor = parseFloat($(element).val().replace(",", "."));

    if (valor < minimo || valor > maximo) {
        AddErro(element, msgErro);
    }

}

function IsNullOrUndefined(obj) {
    return obj == null || obj !== "";
}

(function ($) {
    $.fn.comRolagem = function () {
        return this.each(function () {
            var $tFixed;           // Cópia do cabeçalho da tabela
            var $this = $(this);    // Tabela original
            var $div;
            var origthead = $this.find("thead");

            function resizeFixed() {
                origthead.show();
                $tFixed.css("top", $div.top);

                // Pegamos cada campo da cópia do cabeçalho
                //console.log($this.css('width'));
                $tFixed.find("th").each(function (i) {
                    // Fazemos com que cada campo tenha o mesmo tamanho
                    // do campo original
                    $(this).css("width", $this.find("th").eq(i).css("width") + "px");
                });

                origthead.hide();
            }

            function htmlClean(element) {
                $(element).contents().filter(function () {
                    if (this.nodeType !== 3) {
                        htmlClean(this);
                        return false;
                    }
                    else {
                        return !/\S/.test(this.nodeValue);
                    }
                }).remove();

            }

            function init() {
                htmlClean($this);
                // Criamos a cópia da tabela
                $tFixed = $this.clone();
                // Envolvemos a tabela com uma div
                $this.wrap("<div class=\"scrollTable\"/>");
                $div = $this.parent(".scrollTable");
                // Removemos o corpo da tabela, deixando apenas o cabeçalho,
                // colocando antes da div com a tabela original
                $tFixed.find("tbody").remove().end().addClass("table-fixed").insertBefore($div).wrap("<div class=\"outer-table-copy header-tabela\"/>");
                origthead.hide();
                resizeFixed();
                $tFixed.show();
            }

            // Função para redimensionar a cópia do cabeçalho
//funcao para retirar espacos em branco entre as tds para a correta exibicao no ie-9 
// Inicializa o plugin
            init();
            // Amarra um handler para o caso da janela ser redimensionada
            // para garantir que a tabela e sua cópia tenham o mesmo tamanho
            // dos campos
            $(window).resize(resizeFixed);
        });
    };
})(jQuery);